package bosque.unc;

import bosque.unc.enumerations.EncoderNombre;
import bosque.unc.enumerations.EncoderRango;

/**
 * @author Maxi
 *clase que se encarga de realizar la lectura del encoder
 */
public class LecturaEncoder extends Thread {

	private Integer delay = 300;
	private EncoderNombre encoderNombre;
	private Lecturas lecturas;
	private Interprete interprete;
	private Boolean lecturaEncoderActivada = true;
	
	
	/*
	 * faltaria encoderRango como atributo
	 * 
	 * */

	public LecturaEncoder(Lecturas lec, EncoderNombre nombre, Integer dly){
		this.lecturas = lec;
		this.interprete = lecturas.getInteprete();
		this.encoderNombre = nombre;
		this.delay  = dly;

	}

	

	public void run(){
		while(lecturas.getLecturaEncodersActivada())
		{
			/*Lee la direccion correspondiente a la Decena de Segundos del Encoder y guarda el valor en el key DECENA_SEGUNDOS del HashMap */
			this.lecturas.getEncoder(this.encoderNombre).setearBits(EncoderRango.BCD_SEGUNDOS, interprete.lecturaEncoder(this.encoderNombre, EncoderRango.BCD_SEGUNDOS));
			//System.out.println(this.encoderTipo + "Segundos: " + interprete.lecturaEncoder(this.encoderTipo, EncoderRango.DECENA_SEGUNDOS));
			
			this.lecturas.getEncoder(this.encoderNombre).setearBits(EncoderRango.BCD_MINUTOS, interprete.lecturaEncoder(this.encoderNombre, EncoderRango.BCD_MINUTOS));
			//System.out.println(this.encoderNombre +  "Minutos: " + interprete.lecturaEncoder(this.encoderNombre, EncoderRango.DECENA_MINUTOS));
			
			this.lecturas.getEncoder(this.encoderNombre).setearBits(EncoderRango.BCD_DEC_GRAD, interprete.lecturaEncoder(this.encoderNombre, EncoderRango.BCD_DEC_GRAD));
			//System.out.println(this.encoderNombre +  "Decenas: " + interprete.lecturaEncoder(this.encoderNombre, EncoderRango.DECENA_GRAD_DEC));
			
			this.lecturas.getEncoder(this.encoderNombre).setearBits(EncoderRango.BCD_CENT_GRAD, interprete.lecturaEncoder(this.encoderNombre, EncoderRango.BCD_CENT_GRAD));
			//System.out.println(this.encoderNombre +  "Centenas: " + interprete.lecturaEncoder(this.encoderNombre, EncoderRango.DECENA_GRAD_CEN));
			this.lecturas.getEncoder(this.encoderNombre).decodificarBits();
			this.lecturas.getEncoder(this.encoderNombre).setAnguloEnRadianes(
					Math.toRadians(Funciones.gradMinSegToGrados(
							this.lecturas.getEncoder(this.encoderNombre).getGrados(), 
							this.lecturas.getEncoder(this.encoderNombre).getMinutos(), 
							this.lecturas.getEncoder(this.encoderNombre).getSegundos())));
			
			try
			{
				Thread.sleep(delay);
			} catch (InterruptedException e)
			{
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		

	}



	public Boolean getLecturaEncoderActivada() {
		return lecturaEncoderActivada;
	}



	public void setLecturaEncoderActivada(Boolean lecturaEncoderActivada) {
		this.lecturaEncoderActivada = lecturaEncoderActivada;
	}

}